using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.ComponentModel;

namespace produccion.clases
{

   public  class CLSENCORDD : ObservableObject
    {

MDOgeneral mod = new MDOgeneral();

public List<clases.CLSDETORDD> lisDetOrd = new List<clases.CLSDETORDD>();
public List<clases.CLSORDORDD> lisOrdOrd = new List<clases.CLSORDORDD>();

#region metodos

public int insertar(String strTipo) 
    {
        try 
        {
            NROORD_EOD =nuevo();
            control.Actualizar();
            string query = "insert into encordd (NROORD_EOD,CODCLI_EOD,FECORD_EOD,ESTADO_EOD,NRODES_EOD, TIPORD_EOD) values ('" + NROORD_EOD + "','" + CODCLI_EOD + "','" + FECORD_EOD.ToShortDateString() + "','" + ESTADO_EOD + "','" + NRODES_EOD + "', '" + strTipo + "')";
            int i= mod.comando(query);
            return i;
        }
        catch (Exception ex) {throw ex; }
    }

    public int actualizar() 
    {
        try 
        {
            string query = "update encordd set CODCLI_EOD='" + CODCLI_EOD + "',FECORD_EOD='" + FECORD_EOD.ToShortDateString() + "',ESTADO_EOD='" + ESTADO_EOD + "',NRODES_EOD='" + NRODES_EOD + "' where NROORD_EOD='"+NROORD_EOD+"'";
            return mod.comando(query);
        }
        catch (Exception ex) { throw ex; }
    }

    public int eliminar() 
    {
        try 
        {
            ESTADO_EOD = "X";
            return actualizar();
        }
        catch (Exception ex) { throw ex; }
    }
        
    public Boolean existe() 
    {
        try 
        {
            string query = "select count(*) from encordd where NROORD_EOD='"+NROORD_EOD+"'";
            DataTable val = mod.consulta(query);
            if (val.Rows.Count > 0) {
                if (Convert.ToUInt32(val.Rows[0][0])>0) {
                    return true;
                }
            }
            return false;
        }
        catch (Exception ex) { throw ex; }
}

    public Boolean guardar(String strTipo) 
        {
            try 
            {
                MDOgeneral.transaccion= MDOgeneral.conexion.BeginTransaction();

                if (!existe())
                {
                    if (insertar(strTipo) == 0)
                        return false;

                    foreach (CLSDETORDD detord in lisDetOrd)
                    {
                        if (detord.insertar() == 0)
                            return false;
                    }
                    foreach (CLSORDORDD ordordd in lisOrdOrd)
                    {
                        if (ordordd.insertar() == 0)
                            return false;
                    }
                }
                else 
                {
                    foreach (CLSDETORDD detord in lisDetOrd)
                    {
                        if (detord.existe())
                        {
                            if (detord.actualizar() == 0)
                                return false;
                        }
                        else 
                        {
                            if (detord.insertar() == 0)
                                return false;
                        }
                    }
                    foreach (CLSORDORDD ordordd in lisOrdOrd)
                    {
                        if (ordordd.existe())
                        {
                            if (ordordd.actualizar() == 0)
                                return false;
                        }
                        else 
                        {
                            if (ordordd.insertar() == 0)
                                return false;
                        }
                    }  
                }


                MDOgeneral.transaccion.Commit();
                return true;
            }
            catch (Exception ex) 
            {
                MDOgeneral.transaccion.Rollback(); throw ex; 
            }        
        }

        public void consultar() 
        {
            try
            {
                string query = "select nroord_eod, codcli_eod, fecord_eod,estado_eod,nrodes_eod from encordd where nroord_eod='" + NROORD_EOD + "'";
                DataTable val = mod.consulta(query);
                if (val.Rows.Count > 0)
                {
                    NROORD_EOD = val.Rows[0]["nroord_eod"].ToString();
                    CODCLI_EOD = val.Rows[0]["codcli_eod"].ToString().Trim();
                    FECORD_EOD = Convert.ToDateTime(val.Rows[0]["fecord_eod"]);
                    ESTADO_EOD = val.Rows[0]["estado_eod"].ToString();
                    NRODES_EOD = val.Rows[0]["nrodes_eod"].ToString();
                    EXISTE = true;
                }
                else 
                {
                    CODCLI_EOD ="";
                    FECORD_EOD = DateTime.Today;
                    ESTADO_EOD = "P";
                    NRODES_EOD = "";
                    EXISTE = false;
                }
            }
            catch (Exception ex) { throw ex; }
        }

        CLSCONTROLP control = new CLSCONTROLP { ID_CON = "ORD", COD_CON = "DES" };

        public string nuevo() 
        {
            try 
            {
                control.Consultar();
                string num = control.NOM_CON.Substring(1, 5);
                num = (Convert.ToInt32(num)+1).ToString();
                while (num.Length < 5) 
                {
                    num = "0" + num;
                }
                num = control.NOM_CON.Substring(0, 1)+num;
                control.NOM_CON = num;
                return num;
            }
            catch (Exception ex) { throw ex; }
        }

#endregion

#region propiedades

        string _NROORD_EOD ;
        public string NROORD_EOD
        {
            get{return _NROORD_EOD;}
            set{ _NROORD_EOD=value; RaisePropertyChangedEvent("NROORD_EOD"); }
        }

        string _CODCLI_EOD ;
        public string CODCLI_EOD
        {
            get{return _CODCLI_EOD;}
            set{ _CODCLI_EOD=value; RaisePropertyChangedEvent("CODCLI_EOD"); }
        }

        DateTime _FECORD_EOD=DateTime.Today;
        public DateTime FECORD_EOD
        {
            get{return _FECORD_EOD;}
            set{ _FECORD_EOD=value; RaisePropertyChangedEvent("FECORD_EOD"); }
        }

        string _ESTADO_EOD="P";
        public string ESTADO_EOD
        {
            get{return _ESTADO_EOD;}
            set{_ESTADO_EOD=value; RaisePropertyChangedEvent("ESTADO_EOD"); }
        }

        string _NRODES_EOD;
        public string NRODES_EOD 
        {
            get { return _NRODES_EOD; }
            set { _NRODES_EOD = value; }
        }

        Boolean _EXISTE=false;
        public Boolean EXISTE 
        {
            get { return _EXISTE; }
            set { _EXISTE = value; RaisePropertyChangedEvent("EXISTE"); }
        }
#endregion

    }
}
